RSC、server action、on-demand revalidationでPHPのような世界をNext.jsにもたらす
React Server Components
参考
React Server Componentsの仕組み:詳細ガイド | POSTD
これ読んでmiyamonz.iconは理解した
一言で理解するReact Server Components
一言で言うと、React Server Componentsは多段階計算です。
miyamonz.icon視点の解説
Server Componentsの直感的理解
server action
https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions
一応Reactの機能らしいが、それをかなり先行してNext.jsが実現してくれてるっぽい
ので、現状はNext.jsのやつと思っておけば良い
クライアントコンポーネント上から、サーバ上の関数をimportして叩くというもの
役割としてはtrpcに近いが、コード上の書き味がかなり楽になる
https://gyazo.com/5944d4f15ca026b3da34ce0337c4c80f
原理を調べてないが、サーバとクライアントの境界をまたぐようなimportを自動で認識して、RPCに変換してる
魔術すぎるmiyamonz.icon
批判
🌶️ IMHO 🌶️ - Rich Harris on frameworks, the web, and the edge.
svelteの作者による現状のwebとかの意見のなかに、これに関する批判がある
Remixがサーバとクライアントの境界が曖昧になっていて、混乱の元であるとか
この気持ちもわかるんだけど、client, server が密になっていくのは避けられない流れだと思うmiyamonz.icon
on-demand revalidation
参考
Next.js Server Actions と revalidate 周りの挙動を確認する
Data Fetching: Revalidating | Next.js
明示的にrevalidateできる
Next.jsはfetchとかを良い感じにキャッシュする機能を入れてる
fetch上のtag単位、app routerのpage単位とかでrevalidateをかけられる
この辺に関してはreact-queryでもできるmrsekut.icon
しかも、RSCのレンダリングをrevalidateかけて、その差分のみをクライアントに送ることで、フルリロードせずにrevalidateできる!!!
RSCの再レンダリングを発火できるところがすごい
better ISRって感じ
zennの記事の引用
https://gyazo.com/f953a78c2a3f3b8714eb4ac7d2b43291
Layoutの部分のみをrevalidateしてる
以上3つの概念を混ぜると、以下が実現できる
RSC上でサーバ上でデータを取得
prismaとかで
そのデータを修正するには
server actionを叩く
prismaでupdate
その後にrevalidate
revalidateされたのでRSCが再レンダリングされてクライアントに送信される
クライアント上では、ただちに結果が反映される
この過程にtrpcやreact-queryがなくなっていて、フルリロード抜きでサーバ上の永続化層と会話ができる
RSCは既に動くのは確認済みだけど、
server actionとrevalidationはまだ試せてないから確認は要るがmiyamonz.icon
server actionの通信のやり取りの中身を見てみる